DIFF version 1.2 7-2-90 What it is . . . DIFF is a program that will check to see if any files in a specified directory tree have changed since the last time the utility was run. Why use it . . . If you want to find out what files have changed recently in a certain directory (or directory tree), DIFF will come in handy. It is especially helpful on a network where many people may have access to certain files that you need to keep track of. There are some useful examples of DIFF toward the end of this document. How it does it . . . DIFF creates either one or two files for its own use depending upon how you wish to use it. The first is a Benchmark file containing the date and time of the last time the utility was run. It also contains a list of all of the files in the directory along with their dates, times, and sizes as they were at the time the Benchmark file was created. Here is a portion of a Benchmark file: ;DIFF Benchmark created 7-2-1990 at 15:10 ;File sizes, dates, and times in directory: ; >C:\*.* IO .SYS 33337 12-19-1988 0:00:02 MSDOS .SYS 37376 04-19-1989 8:38:32 DOUG'S 0 04-25-1990 14:33:30 BIZLINK 06-06-1990 9:22:18 DOS 04-25-1990 14:02:46 WP51 04-25-1990 14:25:52 AUTOEXEC.BAT 1668 07-02-1990 11:10:36 COMMAND .COM 37557 12-19-1988 0:00:02 CONFIG .SYS 370 07-02-1990 13:58:12 ; >C:\BIZLINK\*.* DOUG 06-06-1990 9:24:34 ATTACH .WPM 3739 05-24-1990 0:00:00 ATTCHCTL.CMD 18258 06-18-1990 0:00:00 BIZLINK .CMD 43434 06-18-1990 0:00:00 BIZLINK .EXE 48556 06-06-1990 0:00:00 ; Notice that DIFF picks up Hidden, System, and Read Only files (IO.SYS and MSDOS.SYS). The file 'DOUGS' is acutally not a file, but the Volumne label on drive C:. You'll also notice that DIFF considers seconds on a file's time stamp to be significant (DOS doesn't display them, but they are there). Even if someone resets the clock to the date and time that DOS display for a particular file and then modifies that file, DIFF will likely report a difference due to the seconds. The second file (if you tell DIFF to create it) is a Difference file containing a list of all of the files that have been changed (according to date, time, and filesize) since the Benchmark file was created. Here is a portion of a Difference File: ; ;DIFF Difference file created 7-2-1990 at 15:19 ;Benchmark file used: 'DIFF.LOG'. ; >C:\LIBRARY\*.* DM_}ED .SET 332 07-02-1990 15:12:22 Time ; 1 - Difference(s) ; >C:\TC\WORK\DIFF\*.* DIFF .EXE 154363 07-02-1990 15:19:06 Size Time DIFF .LOG 155746 07-02-1990 15:10:52 Size Date Time DIFF .OBJ 19380 07-02-1990 15:19:02 Size Time DIFF .DIF 766 07-02-1990 15:15:36 Added DIFF .PRJ 32643 07-02-1990 15:19:06 Size Time DIFF .CPP 26598 07-02-1990 15:18:46 Size Time DIFF .BAK 26615 07-02-1990 15:14:38 Deleted ; 7 - Difference(s) ; ; 113 - total Directories processed ; 3255 - total Items processed ; 8 - total Difference(s) Note that DIFF will find HIDDEN directories that are newly added or deleted but will not check any files inside hidden directories for differenc- es. See the note about 'A Little Trick' below. When DIFF checks your files, it reads the Benchmark file and compares it against the current contents of the directories that you told it to check. If it finds files that have been changed, it writes a list of them to a Differ- ence file (and/or optionally, to the screen). Running it . . . DIFF has many options that tell it exactly what you want it to do. Each time you run it, DIFF will essentially do one of two things, create a Benchmark file, or check a directory against an existing Benchmark file. Usage: DIFF option [option...] [path\filespec] þ When running DIFF, you can have DIFF.EXE anywhere that DOS can find it (in the current directory or in your path). þ You may specify any of DIFF's options in any order whatsoever. þ If you specify two conflicting options (like /D and /N) the last one encountered will take precedence over the prior one. þ You must separate each option with a space. If you do not, DIFF will not be able to distinguish between them. For example, DIFF will interpret 'DIFF /M/O' incorrectly (DIFF will think you meant 'DIFF /M-O'. þ The dash '-' characters in certain parameters are necessary, without them, DIFF will get confused about what you intended it to do. Actually, the dash could be any character (as long as there is something there DIFF doesn't care what is used). You could say 'DIFF /M/O' and DIFF would think you meant 'DIFF /M-O' and would create a Benchmark file named 'O' in the current directory. þ If you do not specify any options, DIFF displays its help screen. Since there are so many different command line options, the following section will explain each one in further detail. The Finer Points This is part of DIFF's help screen. It displays a quick summary of each option. Options /M-filename Make Benchmark file using 'filename' /C-filename Check directory using 'filename' as a Benchmark. /D-filename Write Difference file to 'filename.' /R-levels Recursive operation. Levels = the number of dir levels to scan. /S Screen display on. Echos Difference file to screen. /N No Difference file. (Implies /S) /U Unchanged files displayed and/or written in Difference file. /O Overwrite old Benchmark file with the newly created one. /A Append to Benchmark or Difference file (depends on /M or /C). /H Display this help screen. path The 'path' to begin working in (MUST END WITH A BACKSLASH)! filespec The filename mask (e.g. '*.*') to use in 'path.' Examples DIFF /M /O Make a Benchmark file of the current dir named DIFF.LOG DIFF /C Check Benchmark DIFF.LOG against current directory and write differences to DIFF.DIF /M-filename Make a Benchmark file using 'filename'. If 'filename' is not specified, the name DIFF.LOG is used. This tells DIFF to create a Benchmark file named DIFF.LOG in the current directory. Optionally you can specify a full path and filename to tell DIFF to create the Benchmark somewhere else. /C-filename Check a directory (or directory tree) against 'filename.' If 'filename' is not specified, the name DIFF.LOG is used. This tells DIFF to compare a directory (or directory tree) against the files and directories listed in the Benchmark file. DIFF compares each file that it finds against the information included in the Benchmark file, and if anything is different (size, date, or time), it reports what has changed by writing it to a file or to the screen (depending upon the /S and /N options). /D-filename Create a Difference file named 'filename.' If 'filename' is not specified, the name DIFF.DIF is used. This option is only needed if you wish to use a different Difference file name. This option is only valid when used with the /C option. /R-levels Scan the directory tree recursively down to 'levels' levels deep. If 'levels' is not specified, DIFF will scan all levels 'under' the starting directory level. For example, if your directory tree looked like this: C:\ ÃÄÄÄ UTIL ³ ÀÄÄÄ MISC ÀÄÄÄ WP51 ÃÄÄÄ DOC ÀÄÄÄ GRAPHICS þ without /R þ would include only the root directory (C:\). þ /R-1 þ would include the directories C:\, C:\UTIL\, and C:\WP51\. þ /R þ would include all of the directories. þ /R-2 þ would do the same thing as /R in this case since the deepest directory is only 2 levels deep. You can also use /R to process only a specific branch of the directory tree. If you had specified: DIFF /M /R C:\WP51\ DIFF would have processed the directories C:\WP51\, C:\WP51\DOC\, and C:\WP51\GRAPHICS. Note: Using this option on a large network drive can take quite a while. Since it may not look like it is doing anything, you may think your machine has 'hung', but be patient, it does work. /S Screen display. If this option is specified, DIFF will echo all data to the screen as well as to the Difference file (if one is being created). Pressing any key while DIFF is displaying changed file information on the screen will either stop screen display (turn off the /S option), or abort the program (if /N was specified). This can be useful when you are running DIFF with a batch file that uses the /S option but you don't need (or want) to see all of the information on the screen. This option is only valid when used with the /C option. /N No Difference file. If this option is specified, DIFF will not create a Difference file. This option automatically sets the /S option. This option is only valid when used with the /C option. /U Include unchanged files. If this option is specified, DIFF will include unchanged files in the Difference file (or display). Normally DIFF only reports the files which have changed since the last Benchmark was created. This option will allow DIFF to display ALL files. This option is only valid when used with the /C option. /O Overwrite Benchmark file. If this option is specified, DIFF will automatically overwrite an existing Benchmark file when creating a new Benchmark. The default is not to overwrite an existing file. This option is only valid when used with the /M option. /A Append to Benchmark or Difference file. If this option is specified, DIFF will append all information that it produces to an existing Benchmark or Difference file. If the file does not exist, it will be created. For example, this option could be used when you want your Difference file to be a revision history of each time that the files have (or have not) changed. /H Help. If this option is specified (anywhere) on the command line, DIFF will display its help screen and then exit. path The path to begin working on. If included, the path MUST end with the backslash character ('\'). If it does not end in a backslash character (e.g. 'C:\UTIL'), DIFF will use the intended directory name as a part of the 'filespec' parameter (see below). In the example, instead of using 'C:\UTIL\*.*' (as intended) DIFF would use 'C:\UTIL.*' and would only check the files named 'UTIL.*' in the root directory of drive C:. filespec The filename mask to use when searching for files. This can include the wildcard characters '*' and '?.' If a filename or an extension is not supplied (e.g. "TEST" or ".DOC" or nothing at all), the wildcard '*' will be supplied automatically and the examples would become "TEST.*", "*.DOC", and "*.*" respectively. Errorlevels returned to DOS When used with the /C option, DIFF will return an errorlevel to DOS (for use in batch files) indicating how many differences it found when comparing files. If the number of differences exceeds 250, it will return an errorlevel of 255 (the maximum allowed by DOS). This was to allow for the following error messages to be reported via errorlevel. DIFF will return the following error codes under the listed circumstanc- es. 251 þ Couldn't open Benchmark file. 252 þ Couldn't open Difference file. 253 þ Help was requested on the command line. 254 þ DIFF couldn't find anything useful to do. Most likely, /C or /M was not specified. The following segment of text is a batch file that controls what happens when there are errors or certain numbers of differences. diff /c-c:\log\diff.Log /d-c:\log\diff.dif /r c:\ if errorlevel 255 goto lots if errorlevel 251 goto error if errorlevel 11 goto some if errorlevel 1 goto few :none echo There were No Differences. goto end :lots echo There were Lots of differences (more than 250). goto end :some echo There were Some differences (between 11 and 250). goto end :few echo There were a Few differences (between 1 and 10). goto end :error echo There was an error running DIFF (don't know what kind). :end echo Done! Note the order in which errorlevels are checked. When DOS sets an errorlevel, all lower errorlevels become true. In other words, if DOS sets the errorlevel to 100, then 99, 98, and everything down to 0 is set as well. For this reason, you must check the highest errorlevels first, and work your way down to the lower error levels. When used with the /M option, DIFF will return the following errorlevels. 0 þ Successful in creating the Benchmark file. 1 þ Terminated because the Benchmark file existed and /O or /A was not specified. 251 þ Couldn't open Benchmark file. 253 þ Help was requested on the command line. 254 þ DIFF couldn't find anything useful to do. Most likely, /C or /M was not specified. A Little Trick If you use DIFF to check your entire Hard Drive, you will find that it will always report that the Benchmark file, and sometimes the Difference file have been changed since the last run. In order to get around this, you can create a hidden directory where DIFF does not check files for differences. If you store your Benchmark and your Difference files in a hidden directory, they will not be checked for differences when scanning your entire drive. You will be able to see if someone has created or deleted a hidden directory, but not if they have made changes to the files within that directory. To create a hidden directory requires a specialized utility. Normal DOS will not allow you to create a hidden directory. I use DirMagic on my system, although many others will work just as well. Specifications DIFF: þ was written, compiled, and linked with Turbo C++ by Borland þ was packed with EXEPACK version 4.00 by Microsoft and TINYPROG by Tranzoa, Co. þ was developed under DOS 4.01 þ has been tested with Novell Netware up through version 386 3.0 þ will support up to 2500 files per directory (maximum due to memory limitations) þ will support up to 3000 directories on a single volume (hard disk) þ requires approximately 170K bytes of RAM to run þ was designed with command line or batch file operation in mind þ is free and I don't expect anyhing except enhancements or bug reports. þ will be updated if bugs are found or enhancement requests are received and implemented. Examples Here are a few ways that I have found DIFF can be used. If you think your way of using DIFF could be widely used, let me know so I can document it here. Document Management System This is a very simple use of DIFF. It allows many people to make changes to a group of documents in a given directory and allows you to check the directory periodically to see if any of the documents have been updated in case they need to be printed, or otherwise processed. To make the Benchmark, be logged to the directory containing the documents that you want to check and type the command: DIFF /M /O To check the Benchmark, be logged to the directory containing the documents that you want to check and type the command: DIFF /C /S The results of these two steps will be a file named DIFF.DIF in the directory where the documents reside as well as the display on the screen of the documents that have been changed. Crude Security System This is one way to make a Benchmark of, and later check, your entire hard drive. This is a sort of crude security system that doesn't stop anyone from making changes to your system, but does tell you what has been changed. First, to make the Benchmark, you may be logged to any drive or any directory you choose. then type the command: DIFF /M-C:\DRIVEC.LOG /O /R C:\ DIFF will create a Benchmark file named DRIVEC.LOG in the root directory of drive C:. If a file with that name already existed, DIFF will overwrite it. DIFF will start in the root directory of drive C: and will process all of the directories on the entire drive logging all file to DRIVEC.LOG as it goes. Second, to check the entire hard drive against the Benchmark you may be logged to any drive or directory on your system and type the command: DIFF /C-C:\DRIVEC.LOG C:\ /D-C:\DRIVEC.DIF /R DIFF will look for an file in the root directory of drive C: named DRIVEC.LOG. It will then use this file to compare all directories on drive C: (starting at the root directory) and log any differences to DRIVEC.DIF in the root directory of drive C:. The final results of these two commands will be a file named C:\DRIVEC.DIF which will contain a list of files that had changed between the time you made the Benchmark and the time you checked it. Enjoy! If you have any questions, enhancements or bug reports, please feel free to contact me at: Doug McKay 294 East Nineta Circle Orem, UT 84057-4703 (801) 224-7288 ----------------end-of-author's-documentation--------------- Software Library Information: This disk copy provided as a service of Public (software) Library We are not the authors of this program, nor are we associated with the author in any way other than as a distributor of the program in accordance with the author's terms of distribution. Please direct shareware payments and specific questions about this program to the author of the program, whose name appears elsewhere in this documentation. If you have trouble getting in touch with the author, we will do whatever we can to help you with your questions. All programs have been tested and do run. To report problems, please use the form that is in the file PROBLEM.DOC on many of our disks or in other written for- mat with screen printouts, if possible. PsL cannot debug pro- programs over the telephone, though we can answer questions. Disks in the PsL are updated monthly, so if you did not get this disk directly from the PsL, you should be aware that the files in this set may no longer be the current versions. Also, if you got this disk from another vendor and are having prob- lems, be aware that some files may have become corrupted or lost by that vendor. Get a current, working disk from PsL. For a copy of the latest monthly software library newsletter and a list of the 2,000+ disks in the library, call or write Public (software) Library P.O.Box 35705 - F Houston, TX 77235-5705 1-800-2424-PSL MC/Visa/AmEx Outside of U.S. or in Texas or for general information, Call 1-713-524-6394 PsL also has an outstanding catalog for the Macintosh.